Amazon Aurora MySQLをHashiCorp Vault Serverのストレージにする
はじめに
Vault ServerはストレージとしてMySQLが使えます。今回はAmazon Aurora MySQLをストレージとして使ってみます。
やってみた
Amazon Aurora MySQLの準備
以下のようにAmazon Aurora MySQLを構築しました。またセキュリティグループの設定で、Vault ServerとなるEC2から接続を許可しておきます。
サーバ側の作業
Vault Server起動時に指定するConfigファイルを作成します。storage項目でMySQLを指定します。また前回同様にオレオレ証明書でTLSを有効にしています。
storage "mysql" { address = "aurora-mysql.XXXXXX.ap-northeast-1.rds.amazonaws.com:3306" username = "ADMIN" password = "PASSWORD" database = "vault" } listener "tcp" { address = "EC2のプライベートIPアドレス:8200" tls_cert_file = "/home/ec2-user/vault-server.crt" tls_key_file = "/home/ec2-user/vault-server.key" }
MySQLを使う場合のパラメータは以下の通りです。
- address ... MySQLサーバのアドレス。今回の場合はAurora MySQLのエンドポイントを設定しています。
- database ... Vaultで使うデータベース名。ここで指定したデータベースが存在しない場合は作成します。
- table ... Vaultで使うテーブル名。 ここで指定したテーブルが存在しない場合は作成します。
- tls_ca_file ... TLS接続する場合のCAファイルを指定。
- max_parallel ... 最大並列接続数。デフォルトは128。
- username ... MySQLサーバに接続するためのユーザー名。
- password ... MySQLサーバに接続するためのユーザーのパスワード。
Vault Serverを起動します。Storageがmysqlになっています。
$ sudo ./bin/vault server -config=config.hcl ==> Vault server configuration: Cgo: disabled Listener 1: tcp (addr: "EC2のプライベートIPアドレス:8200", cluster address: "EC2のプライベートIPアドレス:8201", tls: "enabled") Log Level: info Mlock: supported: true, enabled: true Storage: mysql Version: Vault v0.9.3 Version Sha: 7d73ac4c967b3b8726c71e00c017129e1d36ad3c ==> Vault server started! Log data will stream in below:
この時点でConfigファイルで指定したテーブルが出来ています。
$ mysql -h aurora-mysql.XXXXXX.ap-northeast-1.rds.amazonaws.com -P 3306 -u ADMIN -p vault mysql> show tables from vault; +-----------------+ | Tables_in_vault | +-----------------+ | vault | +-----------------+ 1 row in set (0.01 sec)
テーブル構造はこんな感じ。
mysql> desc vault; +-------------+----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------------+------+-----+---------+-------+ | vault_key | varbinary(512) | NO | PRI | NULL | | | vault_value | mediumblob | YES | | NULL | | +-------------+----------------+------+-----+---------+-------+ 2 rows in set (0.01 sec)
ちなみにレコードは0件です。
mysql> select * from vault; Empty set (0.00 sec)
クライアント側の作業
Vault Serverのアドレスを環境変数に設定します。
$ export VAULT_ADDR='https://EC2のパブリックIPアドレス:8200'
initializeします。
$ vault operator init -tls-skip-verify
するとvaultテーブルに16件のレコードが作成されます。。これはVault Serverの設定などが格納されています。
mysql> select vault_key from vault; +-------------------------------------------------------------+ | vault_key | +-------------------------------------------------------------+ | core/audit | | core/auth | | core/cluster/local/info | | core/keyring | | core/local-audit | | core/local-auth | | core/local-mounts | | core/master | | core/mounts | | core/seal-config | | core/wrapping/jwtkey | | sys/policy/default | | sys/policy/response-wrapping | | sys/token/accessor/2081f7518896b21c5d9df727af5ff1ca4a57c3dd | | sys/token/id/83cbf1c725fb96b0106a4033ec73a49d273332ef | | sys/token/salt | +-------------------------------------------------------------+ 16 rows in set (0.01 sec)
Unsealして使えるようにします。
$ vault operator unseal -tls-skip-verify $ vault operator unseal -tls-skip-verify $ vault operator unseal -tls-skip-verify
loginします。
$ vault login -tls-skip-verify 6bcc76e3-98d8-3d5d-a8e1-a15ad3cc9ac8
さて、それでは実際に値を格納してみます。
$ vault write -tls-skip-verify secret/sasakidaisuke value=smokeymonkey Success! Data written to: secret/sasakidaisuke
するとvault_keyがlogicalから始まるレコードが作成されます。valut_valueは暗号化されており読めません。
mysql> select * from vault where vault_key like "logical%"; +------------------------------------------------------------+-----------------------------------------------------------+ | vault_key | vault_value | +------------------------------------------------------------+-----------------------------------------------------------+ | logical/ecc6f036-b5d8-c282-b0cf-323f439f303c/sasakidaisuke | �~���£� �����wߛ����&!�U1�8���ѡuϺΦa��Z���t | +------------------------------------------------------------+-----------------------------------------------------------+ 1 row in set (0.00 sec)
さいごに
MySQLをストレージとして使う場合にはHigh Availability Modeがサポートされません。Aurora自体は信頼性が高いのですがフロントとなるVault Serverの可用性の担保が難しいことを認識しておきましょう。